﻿#define REFELECTION_OPTIMIZE_LEVEL_2

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace Titan.Reflection
{
    internal static partial class ObjectInvoker
    {
#if REFELECTION_OPTIMIZE_LEVEL_1 || REFELECTION_OPTIMIZE_LEVEL_2 || REFELECTION_OPTIMIZE_LEVEL_3 || REFELECTION_OPTIMIZE_LEVEL_4 || REFELECTION_OPTIMIZE_LEVEL_5 || REFELECTION_OPTIMIZE_LEVEL_6
        private class __Function<T, TReturn> : IObjectInvoker
        {
            private delegate TReturn Func(T target);

            public __Function(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TReturn retval = _func((T)target);
                return retval;
            }

            private Func _func;
        }
#endif

#if REFELECTION_OPTIMIZE_LEVEL_2 || REFELECTION_OPTIMIZE_LEVEL_3 || REFELECTION_OPTIMIZE_LEVEL_4 || REFELECTION_OPTIMIZE_LEVEL_5 || REFELECTION_OPTIMIZE_LEVEL_6

        private class __FunctionI<T, TReturn, TArg1> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1);

            public __FunctionI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TReturn retval = _func((T)target, arg1);
                return retval;
            }

            private Func _func;
        }

        private class __FunctionR<T, TReturn, TArg1> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1);

            public __FunctionR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TReturn retval = _func((T)target, ref arg1);
                args[0] = arg1;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionO<T, TReturn, TArg1> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1);

            public __FunctionO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TReturn retval = _func((T)target, out arg1);
                args[0] = arg1;
                return retval;
            }

            private Func _func;
        }
#endif

#if REFELECTION_OPTIMIZE_LEVEL_3 || REFELECTION_OPTIMIZE_LEVEL_4 || REFELECTION_OPTIMIZE_LEVEL_5 || REFELECTION_OPTIMIZE_LEVEL_6

        private class __FunctionII<T, TReturn, TArg1, TArg2> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2);

            public __FunctionII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TReturn retval = _func((T)target, arg1, arg2);
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIR<T, TReturn, TArg1, TArg2> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2);

            public __FunctionIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TReturn retval = _func((T)target, arg1, ref arg2);
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIO<T, TReturn, TArg1, TArg2> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2);

            public __FunctionIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TReturn retval = _func((T)target, arg1, out arg2);
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRI<T, TReturn, TArg1, TArg2> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2);

            public __FunctionRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TReturn retval = _func((T)target, ref arg1, arg2);
                args[0] = arg1;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRR<T, TReturn, TArg1, TArg2> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2);

            public __FunctionRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TReturn retval = _func((T)target, ref arg1, ref arg2);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRO<T, TReturn, TArg1, TArg2> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2);

            public __FunctionRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TReturn retval = _func((T)target, ref arg1, out arg2);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOI<T, TReturn, TArg1, TArg2> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2);

            public __FunctionOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TReturn retval = _func((T)target, out arg1, arg2);
                args[0] = arg1;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOR<T, TReturn, TArg1, TArg2> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2);

            public __FunctionOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TReturn retval = _func((T)target, out arg1, ref arg2);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOO<T, TReturn, TArg1, TArg2> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2);

            public __FunctionOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TReturn retval = _func((T)target, out arg1, out arg2);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }
#endif

#if REFELECTION_OPTIMIZE_LEVEL_4 || REFELECTION_OPTIMIZE_LEVEL_5 || REFELECTION_OPTIMIZE_LEVEL_6
        private class __FunctionIII<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3);

            public __FunctionIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, arg1, arg2, arg3);
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIR<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3);

            public __FunctionIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3);
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIO<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3);

            public __FunctionIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, arg1, arg2, out arg3);
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRI<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3);

            public __FunctionIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3);
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRR<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3);

            public __FunctionIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRO<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3);

            public __FunctionIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOI<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3);

            public __FunctionIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, arg1, out arg2, arg3);
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOR<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3);

            public __FunctionIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOO<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3);

            public __FunctionIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRII<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3);

            public __FunctionRII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3);
                args[0] = arg1;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIR<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3);

            public __FunctionRIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIO<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3);

            public __FunctionRIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRI<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3);

            public __FunctionRRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRR<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3);

            public __FunctionRRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRO<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3);

            public __FunctionRRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROI<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3);

            public __FunctionROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROR<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3);

            public __FunctionROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROO<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3);

            public __FunctionROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOII<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3);

            public __FunctionOII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, out arg1, arg2, arg3);
                args[0] = arg1;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIR<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3);

            public __FunctionOIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIO<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3);

            public __FunctionOIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORI<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3);

            public __FunctionORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORR<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3);

            public __FunctionORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORO<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3);

            public __FunctionORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOI<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3);

            public __FunctionOOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOR<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3);

            public __FunctionOOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOO<T, TReturn, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3);

            public __FunctionOOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }
#endif

#if REFELECTION_OPTIMIZE_LEVEL_5 || REFELECTION_OPTIMIZE_LEVEL_6

        private class __FunctionIIII<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __FunctionIIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, arg2, arg3, arg4);
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __FunctionIIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, arg2, arg3, ref arg4);
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __FunctionIIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, arg2, arg3, out arg4);
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __FunctionIIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, arg4);
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __FunctionIIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, ref arg4);
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __FunctionIIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, out arg4);
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __FunctionIIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, arg4);
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __FunctionIIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, ref arg4);
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __FunctionIIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, out arg4);
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRII<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __FunctionIRII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, arg4);
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRIR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __FunctionIRIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, ref arg4);
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRIO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __FunctionIRIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, out arg4);
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRRI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __FunctionIRRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, arg4);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRRR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __FunctionIRRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, ref arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRRO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __FunctionIRRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, out arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIROI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __FunctionIROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, arg4);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIROR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __FunctionIROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, ref arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIROO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __FunctionIROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, out arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOII<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __FunctionIOII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, arg4);
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOIR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __FunctionIOIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, ref arg4);
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOIO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __FunctionIOIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, out arg4);
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIORI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __FunctionIORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, arg4);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIORR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __FunctionIORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, ref arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIORO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __FunctionIORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, out arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOOI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __FunctionIOOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, arg4);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOOR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __FunctionIOOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, ref arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOOO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __FunctionIOOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, out arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIII<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __FunctionRIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, arg4);
                args[0] = arg1;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __FunctionRIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, ref arg4);
                args[0] = arg1;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __FunctionRIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, out arg4);
                args[0] = arg1;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __FunctionRIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, arg4);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __FunctionRIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __FunctionRIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __FunctionRIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, arg4);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __FunctionRIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __FunctionRIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, out arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRII<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __FunctionRRII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRIR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __FunctionRRIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRIO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __FunctionRRIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRRI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __FunctionRRRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRRR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __FunctionRRRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRRO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __FunctionRRRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRROI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __FunctionRROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRROR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __FunctionRROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRROO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __FunctionRROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROII<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __FunctionROII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROIR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __FunctionROIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROIO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __FunctionROIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRORI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __FunctionRORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRORR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __FunctionRORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRORO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __FunctionRORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROOI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __FunctionROOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROOR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __FunctionROOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROOO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __FunctionROOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIII<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __FunctionOIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, arg4);
                args[0] = arg1;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __FunctionOIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, ref arg4);
                args[0] = arg1;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __FunctionOIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, out arg4);
                args[0] = arg1;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __FunctionOIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, arg4);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __FunctionOIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __FunctionOIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __FunctionOIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, arg4);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __FunctionOIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __FunctionOIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, out arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORII<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __FunctionORII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORIR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __FunctionORIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORIO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __FunctionORIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORRI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __FunctionORRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORRR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __FunctionORRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORRO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __FunctionORRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOROI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __FunctionOROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOROR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __FunctionOROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOROO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __FunctionOROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOII<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __FunctionOOII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOIR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __FunctionOOIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOIO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __FunctionOOIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOORI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __FunctionOORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOORR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __FunctionOORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOORO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __FunctionOORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOOI<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __FunctionOOOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOOR<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __FunctionOOOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOOO<T, TReturn, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __FunctionOOOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }
#endif

#if REFELECTION_OPTIMIZE_LEVEL_6

        private class __FunctionIIIII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionIIIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, arg3, arg4, arg5);
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionIIIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, arg3, arg4, ref arg5);
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionIIIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, arg3, arg4, out arg5);
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionIIIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, arg3, ref arg4, arg5);
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionIIIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, arg3, ref arg4, ref arg5);
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionIIIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, arg3, ref arg4, out arg5);
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionIIIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, arg3, out arg4, arg5);
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionIIIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, arg3, out arg4, ref arg5);
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionIIIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, arg3, out arg4, out arg5);
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIRII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionIIRII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, arg4, arg5);
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIRIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionIIRIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, arg4, ref arg5);
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIRIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionIIRIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, arg4, out arg5);
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIRRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionIIRRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, ref arg4, arg5);
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIRRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionIIRRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, ref arg4, ref arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIRRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionIIRRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, ref arg4, out arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIROI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionIIROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, out arg4, arg5);
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIROR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionIIROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, out arg4, ref arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIROO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionIIROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, ref arg3, out arg4, out arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIOII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionIIOII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, arg4, arg5);
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIOIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionIIOIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, arg4, ref arg5);
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIOIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionIIOIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, arg4, out arg5);
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIORI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionIIORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, ref arg4, arg5);
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIORR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionIIORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, ref arg4, ref arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIORO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionIIORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, ref arg4, out arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIOOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionIIOOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, out arg4, arg5);
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIOOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionIIOOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, out arg4, ref arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIIOOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionIIOOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, arg2, out arg3, out arg4, out arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRIII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionIRIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, arg4, arg5);
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionIRIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, arg4, ref arg5);
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionIRIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, arg4, out arg5);
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionIRIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, ref arg4, arg5);
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionIRIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionIRIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionIRIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, out arg4, arg5);
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionIRIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionIRIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, arg3, out arg4, out arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRRII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionIRRII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRRIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionIRRIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRRIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionIRRIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRRRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionIRRRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, ref arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRRRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionIRRRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRRRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionIRRRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRROI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionIRROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, out arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRROR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionIRROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRROO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionIRROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, ref arg3, out arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIROII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionIROII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIROIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionIROIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIROIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionIROIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRORI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionIRORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, ref arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRORR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionIRORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIRORO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionIRORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIROOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionIROOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, out arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIROOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionIROOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIROOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionIROOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, ref arg2, out arg3, out arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOIII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionIOIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, arg4, arg5);
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionIOIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, arg4, ref arg5);
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionIOIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, arg4, out arg5);
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionIOIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, ref arg4, arg5);
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionIOIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionIOIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionIOIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, out arg4, arg5);
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionIOIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionIOIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, arg3, out arg4, out arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIORII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionIORII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIORIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionIORIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIORIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionIORIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIORRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionIORRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, ref arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIORRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionIORRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIORRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionIORRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOROI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionIOROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, out arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOROR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionIOROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOROO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionIOROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, ref arg3, out arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOOII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionIOOII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOOIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionIOOIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOOIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionIOOIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOORI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionIOORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, ref arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOORR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionIOORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOORO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionIOORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOOOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionIOOOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, out arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOOOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionIOOOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionIOOOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionIOOOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, arg1, out arg2, out arg3, out arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIIII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionRIIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, arg4, arg5);
                args[0] = arg1;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionRIIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionRIIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionRIIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionRIIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionRIIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionRIIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionRIIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionRIIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIRII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionRIRII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIRIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionRIRIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIRIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionRIRIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIRRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionRIRRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIRRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionRIRRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIRRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionRIRRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIROI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionRIROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIROR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionRIROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIROO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionRIROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIOII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionRIOII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIOIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionRIOIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIOIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionRIOIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIORI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionRIORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIORR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionRIORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIORO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionRIORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIOOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionRIOOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIOOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionRIOOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRIOOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionRIOOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRIII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionRRIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionRRIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionRRIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionRRIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionRRIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionRRIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionRRIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionRRIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionRRIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRRII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionRRRII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRRIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionRRRIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRRIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionRRRIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRRRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionRRRRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRRRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionRRRRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRRRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionRRRRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRROI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionRRROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRROR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionRRROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRROO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionRRROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRROII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionRROII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRROIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionRROIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRROIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionRROIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRORI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionRRORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRORR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionRRORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRRORO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionRRORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRROOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionRROOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRROOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionRROOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRROOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionRROOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, ref arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROIII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionROIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionROIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionROIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionROIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionROIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionROIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionROIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionROIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionROIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRORII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionRORII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRORIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionRORIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRORIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionRORIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRORRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionRORRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRORRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionRORRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionRORRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionRORRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROROI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionROROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROROR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionROROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROROO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionROROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROOII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionROOII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROOIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionROOIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROOIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionROOIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROORI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionROORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROORR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionROORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROORO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionROORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROOOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionROOOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROOOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionROOOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionROOOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionROOOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, ref arg1, out arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIIII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionOIIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, arg4, arg5);
                args[0] = arg1;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionOIIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionOIIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionOIIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionOIIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionOIIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionOIIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionOIIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionOIIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIRII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionOIRII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIRIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionOIRIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIRIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionOIRIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIRRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionOIRRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIRRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionOIRRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIRRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionOIRRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIROI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionOIROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIROR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionOIROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIROO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionOIROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIOII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionOIOII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIOIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionOIOIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIOIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionOIOIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIORI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionOIORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIORR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionOIORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIORO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionOIORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIOOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionOIOOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIOOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionOIOOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOIOOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionOIOOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORIII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionORIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionORIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionORIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionORIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionORIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionORIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionORIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionORIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionORIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORRII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionORRII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORRIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionORRIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORRIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionORRIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORRRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionORRRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORRRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionORRRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORRRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionORRRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORROI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionORROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORROR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionORROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORROO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionORROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOROII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionOROII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOROIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionOROIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOROIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionOROIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORORI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionORORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORORR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionORORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionORORO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionORORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOROOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionOROOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOROOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionOROOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOROOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionOROOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, ref arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOIII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionOOIII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOIIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionOOIIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOIIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionOOIIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOIRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionOOIRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOIRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionOOIRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOIRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionOOIRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOIOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionOOIOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOIOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionOOIOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOIOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionOOIOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOORII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionOORII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOORIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionOORIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOORIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionOORIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOORRI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionOORRI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOORRR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionOORRR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOORRO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionOORRO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOROI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionOOROI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOROR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionOOROR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOROO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionOOROO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOOII<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __FunctionOOOII(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOOIR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __FunctionOOOIR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOOIO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __FunctionOOOIO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOORI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __FunctionOOORI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOORR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __FunctionOOORR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOORO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __FunctionOOORO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOOOI<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __FunctionOOOOI(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOOOR<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __FunctionOOOOR(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }

        private class __FunctionOOOOO<T, TReturn, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate TReturn Func(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __FunctionOOOOO(MethodInfo method)
            {
                _func = (Func)Delegate.CreateDelegate(typeof(Func), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                TReturn retval = _func((T)target, out arg1, out arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return retval;
            }

            private Func _func;
        }
#endif

#if REFELECTION_OPTIMIZE_LEVEL_1 || REFELECTION_OPTIMIZE_LEVEL_2 || REFELECTION_OPTIMIZE_LEVEL_3 || REFELECTION_OPTIMIZE_LEVEL_4 || REFELECTION_OPTIMIZE_LEVEL_5 || REFELECTION_OPTIMIZE_LEVEL_6
        private class __Procedure<T> : IObjectInvoker
        {
            private delegate void Proc(T target);

            public __Procedure(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                _proc((T)target);
                return null;
            }

            private Proc _proc;
        }
#endif

#if REFELECTION_OPTIMIZE_LEVEL_2 || REFELECTION_OPTIMIZE_LEVEL_3 || REFELECTION_OPTIMIZE_LEVEL_4 || REFELECTION_OPTIMIZE_LEVEL_5 || REFELECTION_OPTIMIZE_LEVEL_6

        private class __ProcedureI<T, TArg1> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1);

            public __ProcedureI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                _proc((T)target, arg1);
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureR<T, TArg1> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1);

            public __ProcedureR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                _proc((T)target, ref arg1);
                args[0] = arg1;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureO<T, TArg1> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1);

            public __ProcedureO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                _proc((T)target, out arg1);
                args[0] = arg1;
                return null;
            }

            private Proc _proc;
        }
#endif
#if REFELECTION_OPTIMIZE_LEVEL_3 || REFELECTION_OPTIMIZE_LEVEL_4 || REFELECTION_OPTIMIZE_LEVEL_5 || REFELECTION_OPTIMIZE_LEVEL_6

        private class __ProcedureII<T, TArg1, TArg2> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2);

            public __ProcedureII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                _proc((T)target, arg1, arg2);
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIR<T, TArg1, TArg2> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2);

            public __ProcedureIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                _proc((T)target, arg1, ref arg2);
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIO<T, TArg1, TArg2> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2);

            public __ProcedureIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                _proc((T)target, arg1, out arg2);
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRI<T, TArg1, TArg2> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2);

            public __ProcedureRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                _proc((T)target, ref arg1, arg2);
                args[0] = arg1;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRR<T, TArg1, TArg2> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2);

            public __ProcedureRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                _proc((T)target, ref arg1, ref arg2);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRO<T, TArg1, TArg2> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2);

            public __ProcedureRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                _proc((T)target, ref arg1, out arg2);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOI<T, TArg1, TArg2> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2);

            public __ProcedureOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                _proc((T)target, out arg1, arg2);
                args[0] = arg1;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOR<T, TArg1, TArg2> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2);

            public __ProcedureOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                _proc((T)target, out arg1, ref arg2);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOO<T, TArg1, TArg2> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2);

            public __ProcedureOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                _proc((T)target, out arg1, out arg2);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }
#endif
#if REFELECTION_OPTIMIZE_LEVEL_4 || REFELECTION_OPTIMIZE_LEVEL_5 || REFELECTION_OPTIMIZE_LEVEL_6

        private class __ProcedureIII<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3);

            public __ProcedureIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, arg1, arg2, arg3);
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIR<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3);

            public __ProcedureIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, arg1, arg2, ref arg3);
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIO<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3);

            public __ProcedureIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, arg1, arg2, out arg3);
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRI<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3);

            public __ProcedureIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, arg1, ref arg2, arg3);
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRR<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3);

            public __ProcedureIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, arg1, ref arg2, ref arg3);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRO<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3);

            public __ProcedureIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, arg1, ref arg2, out arg3);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOI<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3);

            public __ProcedureIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, arg1, out arg2, arg3);
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOR<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3);

            public __ProcedureIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, arg1, out arg2, ref arg3);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOO<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3);

            public __ProcedureIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, arg1, out arg2, out arg3);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRII<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3);

            public __ProcedureRII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, ref arg1, arg2, arg3);
                args[0] = arg1;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIR<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3);

            public __ProcedureRIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, ref arg1, arg2, ref arg3);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIO<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3);

            public __ProcedureRIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, ref arg1, arg2, out arg3);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRI<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3);

            public __ProcedureRRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, ref arg1, ref arg2, arg3);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRR<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3);

            public __ProcedureRRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, ref arg1, ref arg2, ref arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRO<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3);

            public __ProcedureRRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, ref arg1, ref arg2, out arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROI<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3);

            public __ProcedureROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, ref arg1, out arg2, arg3);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROR<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3);

            public __ProcedureROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, ref arg1, out arg2, ref arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROO<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3);

            public __ProcedureROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, ref arg1, out arg2, out arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOII<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3);

            public __ProcedureOII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, out arg1, arg2, arg3);
                args[0] = arg1;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIR<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3);

            public __ProcedureOIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, out arg1, arg2, ref arg3);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIO<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3);

            public __ProcedureOIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, out arg1, arg2, out arg3);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORI<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3);

            public __ProcedureORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, out arg1, ref arg2, arg3);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORR<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3);

            public __ProcedureORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, out arg1, ref arg2, ref arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORO<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3);

            public __ProcedureORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, out arg1, ref arg2, out arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOI<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3);

            public __ProcedureOOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, out arg1, out arg2, arg3);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOR<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3);

            public __ProcedureOOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, out arg1, out arg2, ref arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOO<T, TArg1, TArg2, TArg3> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3);

            public __ProcedureOOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                _proc((T)target, out arg1, out arg2, out arg3);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }
#endif
#if REFELECTION_OPTIMIZE_LEVEL_5 || REFELECTION_OPTIMIZE_LEVEL_6

        private class __ProcedureIIII<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __ProcedureIIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, arg2, arg3, arg4);
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIIR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __ProcedureIIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, arg2, arg3, ref arg4);
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIIO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __ProcedureIIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, arg2, arg3, out arg4);
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIRI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __ProcedureIIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, arg2, ref arg3, arg4);
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIRR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __ProcedureIIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, arg2, ref arg3, ref arg4);
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIRO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __ProcedureIIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, arg2, ref arg3, out arg4);
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIOI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __ProcedureIIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, arg2, out arg3, arg4);
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIOR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __ProcedureIIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, arg2, out arg3, ref arg4);
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIOO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __ProcedureIIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, arg2, out arg3, out arg4);
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRII<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __ProcedureIRII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, ref arg2, arg3, arg4);
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRIR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __ProcedureIRIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, ref arg2, arg3, ref arg4);
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRIO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __ProcedureIRIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, ref arg2, arg3, out arg4);
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRRI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __ProcedureIRRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, ref arg2, ref arg3, arg4);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRRR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __ProcedureIRRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, ref arg2, ref arg3, ref arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRRO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __ProcedureIRRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, ref arg2, ref arg3, out arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIROI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __ProcedureIROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, ref arg2, out arg3, arg4);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIROR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __ProcedureIROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, ref arg2, out arg3, ref arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIROO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __ProcedureIROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, ref arg2, out arg3, out arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOII<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __ProcedureIOII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, out arg2, arg3, arg4);
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOIR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __ProcedureIOIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, out arg2, arg3, ref arg4);
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOIO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __ProcedureIOIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, out arg2, arg3, out arg4);
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIORI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __ProcedureIORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, out arg2, ref arg3, arg4);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIORR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __ProcedureIORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, out arg2, ref arg3, ref arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIORO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __ProcedureIORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, out arg2, ref arg3, out arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOOI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __ProcedureIOOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, out arg2, out arg3, arg4);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOOR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __ProcedureIOOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, out arg2, out arg3, ref arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOOO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __ProcedureIOOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, arg1, out arg2, out arg3, out arg4);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIII<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __ProcedureRIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, arg2, arg3, arg4);
                args[0] = arg1;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIIR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __ProcedureRIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, arg2, arg3, ref arg4);
                args[0] = arg1;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIIO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __ProcedureRIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, arg2, arg3, out arg4);
                args[0] = arg1;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIRI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __ProcedureRIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, arg2, ref arg3, arg4);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIRR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __ProcedureRIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIRO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __ProcedureRIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIOI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __ProcedureRIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, arg2, out arg3, arg4);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIOR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __ProcedureRIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIOO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __ProcedureRIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, arg2, out arg3, out arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRII<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __ProcedureRRII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, ref arg2, arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRIR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __ProcedureRRIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, ref arg2, arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRIO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __ProcedureRRIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, ref arg2, arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRRI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __ProcedureRRRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, ref arg2, ref arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRRR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __ProcedureRRRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, ref arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRRO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __ProcedureRRRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, ref arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRROI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __ProcedureRROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, ref arg2, out arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRROR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __ProcedureRROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, ref arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRROO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __ProcedureRROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, ref arg2, out arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROII<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __ProcedureROII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, out arg2, arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROIR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __ProcedureROIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, out arg2, arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROIO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __ProcedureROIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, out arg2, arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRORI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __ProcedureRORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, out arg2, ref arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRORR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __ProcedureRORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, out arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRORO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __ProcedureRORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, out arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROOI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __ProcedureROOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, out arg2, out arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROOR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __ProcedureROOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, out arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROOO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __ProcedureROOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, ref arg1, out arg2, out arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIII<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __ProcedureOIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, arg2, arg3, arg4);
                args[0] = arg1;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIIR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __ProcedureOIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, arg2, arg3, ref arg4);
                args[0] = arg1;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIIO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __ProcedureOIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, arg2, arg3, out arg4);
                args[0] = arg1;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIRI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __ProcedureOIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, arg2, ref arg3, arg4);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIRR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __ProcedureOIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIRO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __ProcedureOIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIOI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __ProcedureOIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, arg2, out arg3, arg4);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIOR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __ProcedureOIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIOO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __ProcedureOIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, arg2, out arg3, out arg4);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORII<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __ProcedureORII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, ref arg2, arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORIR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __ProcedureORIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, ref arg2, arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORIO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __ProcedureORIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, ref arg2, arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORRI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __ProcedureORRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, ref arg2, ref arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORRR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __ProcedureORRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, ref arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORRO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __ProcedureORRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, ref arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOROI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __ProcedureOROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, ref arg2, out arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOROR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __ProcedureOROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, ref arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOROO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __ProcedureOROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, ref arg2, out arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOII<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4);

            public __ProcedureOOII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, out arg2, arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOIR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4);

            public __ProcedureOOIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, out arg2, arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOIO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4);

            public __ProcedureOOIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, out arg2, arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOORI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4);

            public __ProcedureOORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, out arg2, ref arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOORR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4);

            public __ProcedureOORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, out arg2, ref arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOORO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4);

            public __ProcedureOORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, out arg2, ref arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOOI<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4);

            public __ProcedureOOOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, out arg2, out arg3, arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOOR<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4);

            public __ProcedureOOOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, out arg2, out arg3, ref arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOOO<T, TArg1, TArg2, TArg3, TArg4> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4);

            public __ProcedureOOOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                _proc((T)target, out arg1, out arg2, out arg3, out arg4);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }
#endif
#if REFELECTION_OPTIMIZE_LEVEL_6

        private class __ProcedureIIIII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureIIIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, arg3, arg4, arg5);
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIIIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIIIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, arg3, arg4, ref arg5);
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIIIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureIIIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, arg3, arg4, out arg5);
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIIRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureIIIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, arg3, ref arg4, arg5);
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIIRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIIIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, arg3, ref arg4, ref arg5);
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIIRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureIIIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, arg3, ref arg4, out arg5);
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIIOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureIIIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, arg3, out arg4, arg5);
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIIOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIIIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, arg3, out arg4, ref arg5);
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIIOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureIIIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, arg3, out arg4, out arg5);
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIRII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureIIRII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, ref arg3, arg4, arg5);
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIRIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIIRIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, ref arg3, arg4, ref arg5);
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIRIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureIIRIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, ref arg3, arg4, out arg5);
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIRRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureIIRRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, ref arg3, ref arg4, arg5);
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIRRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIIRRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, ref arg3, ref arg4, ref arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIRRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureIIRRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, ref arg3, ref arg4, out arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIROI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureIIROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, ref arg3, out arg4, arg5);
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIROR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIIROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, ref arg3, out arg4, ref arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIROO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureIIROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, ref arg3, out arg4, out arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIOII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureIIOII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, out arg3, arg4, arg5);
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIOIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIIOIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, out arg3, arg4, ref arg5);
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIOIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureIIOIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, out arg3, arg4, out arg5);
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIORI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureIIORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, out arg3, ref arg4, arg5);
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIORR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIIORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, out arg3, ref arg4, ref arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIORO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureIIORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, out arg3, ref arg4, out arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIOOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureIIOOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, out arg3, out arg4, arg5);
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIOOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIIOOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, out arg3, out arg4, ref arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIIOOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureIIOOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, arg2, out arg3, out arg4, out arg5);
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRIII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureIRIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, arg3, arg4, arg5);
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRIIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIRIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, arg3, arg4, ref arg5);
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRIIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureIRIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, arg3, arg4, out arg5);
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRIRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureIRIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, arg3, ref arg4, arg5);
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRIRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIRIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRIRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureIRIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRIOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureIRIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, arg3, out arg4, arg5);
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRIOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIRIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRIOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureIRIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, arg3, out arg4, out arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRRII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureIRRII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, ref arg3, arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRRIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIRRIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, ref arg3, arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRRIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureIRRIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, ref arg3, arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRRRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureIRRRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, ref arg3, ref arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRRRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIRRRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, ref arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRRRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureIRRRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, ref arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRROI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureIRROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, ref arg3, out arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRROR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIRROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, ref arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRROO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureIRROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, ref arg3, out arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIROII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureIROII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, out arg3, arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIROIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIROIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, out arg3, arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIROIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureIROIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, out arg3, arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRORI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureIRORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, out arg3, ref arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRORR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIRORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, out arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIRORO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureIRORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, out arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIROOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureIROOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, out arg3, out arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIROOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIROOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, out arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIROOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureIROOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, ref arg2, out arg3, out arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOIII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureIOIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, arg3, arg4, arg5);
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOIIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIOIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, arg3, arg4, ref arg5);
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOIIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureIOIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, arg3, arg4, out arg5);
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOIRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureIOIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, arg3, ref arg4, arg5);
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOIRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIOIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOIRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureIOIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOIOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureIOIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, arg3, out arg4, arg5);
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOIOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIOIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOIOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureIOIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, arg3, out arg4, out arg5);
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIORII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureIORII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, ref arg3, arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIORIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIORIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, ref arg3, arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIORIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureIORIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, ref arg3, arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIORRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureIORRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, ref arg3, ref arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIORRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIORRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, ref arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIORRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureIORRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, ref arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOROI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureIOROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, ref arg3, out arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOROR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIOROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, ref arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOROO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureIOROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, ref arg3, out arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOOII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureIOOII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, out arg3, arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOOIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIOOIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, out arg3, arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOOIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureIOOIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, out arg3, arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOORI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureIOORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, out arg3, ref arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOORR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIOORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, out arg3, ref arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOORO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureIOORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, out arg3, ref arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOOOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureIOOOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, out arg3, out arg4, arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOOOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureIOOOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, out arg3, out arg4, ref arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureIOOOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureIOOOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, arg1, out arg2, out arg3, out arg4, out arg5);
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIIII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureRIIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, arg3, arg4, arg5);
                args[0] = arg1;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIIIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRIIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIIIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureRIIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIIRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureRIIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIIRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRIIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIIRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureRIIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIIOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureRIIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIIOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRIIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIIOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureRIIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIRII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureRIRII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIRIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRIRIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIRIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureRIRIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIRRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureRIRRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIRRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRIRRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIRRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureRIRRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIROI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureRIROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIROR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRIROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIROO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureRIROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIOII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureRIOII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIOIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRIOIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIOIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureRIOIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIORI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureRIORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIORR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRIORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIORO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureRIORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIOOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureRIOOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIOOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRIOOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRIOOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureRIOOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRIII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureRRIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRIIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRRIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRIIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureRRIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRIRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureRRIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRIRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRRIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRIRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureRRIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRIOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureRRIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRIOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRRIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRIOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureRRIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRRII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureRRRII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRRIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRRRIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRRIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureRRRIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRRRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureRRRRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRRRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRRRRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRRRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureRRRRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRROI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureRRROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRROR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRRROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRROO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureRRROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRROII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureRROII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRROIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRROIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRROIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureRROIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRORI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureRRORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRORR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRRORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRRORO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureRRORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRROOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureRROOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRROOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRROOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRROOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureRROOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, ref arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROIII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureROIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROIIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureROIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROIIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureROIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROIRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureROIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROIRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureROIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROIRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureROIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROIOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureROIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROIOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureROIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROIOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureROIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRORII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureRORII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRORIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRORIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRORIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureRORIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRORRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureRORRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRORRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureRORRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureRORRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureRORRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROROI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureROROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROROR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureROROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROROO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureROROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROOII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureROOII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROOIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureROOIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROOIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureROOIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROORI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureROORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROORR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureROORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROORO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureROORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROOOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureROOOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROOOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureROOOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureROOOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, ref TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureROOOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, ref arg1, out arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIIII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureOIIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, arg3, arg4, arg5);
                args[0] = arg1;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIIIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOIIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIIIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureOIIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIIRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureOIIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIIRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOIIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIIRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureOIIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIIOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureOIIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIIOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOIIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIIOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureOIIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIRII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureOIRII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIRIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOIRIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIRIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureOIRIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIRRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureOIRRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIRRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOIRRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIRRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureOIRRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIROI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureOIROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIROR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOIROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIROO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureOIROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIOII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureOIOII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIOIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOIOIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIOIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureOIOIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIORI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureOIORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIORR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOIORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIORO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureOIORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIOOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureOIOOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIOOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOIOOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOIOOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureOIOOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORIII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureORIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORIIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureORIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORIIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureORIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORIRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureORIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORIRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureORIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORIRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureORIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORIOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureORIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORIOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureORIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORIOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureORIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORRII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureORRII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORRIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureORRIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORRIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureORRIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORRRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureORRRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORRRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureORRRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORRRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureORRRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORROI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureORROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORROR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureORROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORROO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureORROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOROII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureOROII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOROIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOROIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOROIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureOROIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORORI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureORORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORORR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureORORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureORORO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureORORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOROOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureOROOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOROOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOROOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOROOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, ref TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureOROOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, ref arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOIII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureOOIII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOIIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOOIIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOIIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureOOIIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOIRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureOOIRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOIRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOOIRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOIRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureOOIRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOIOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureOOIOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOIOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOOIOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOIOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureOOIOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOORII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureOORII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, ref arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOORIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOORIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, ref arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOORIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureOORIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, ref arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOORRI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureOORRI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, ref arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOORRR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOORRR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, ref arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOORRO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureOORRO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, ref arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOROI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureOOROI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, ref arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOROR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOOROR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, ref arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOROO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, ref TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureOOROO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, ref arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOOII<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, TArg5 arg5);

            public __ProcedureOOOII(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, out arg3, arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOOIR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOOOIR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, out arg3, arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOOIO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, TArg4 arg4, out TArg5 arg5);

            public __ProcedureOOOIO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, out arg3, arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOORI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, TArg5 arg5);

            public __ProcedureOOORI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, out arg3, ref arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOORR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOOORR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, out arg3, ref arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOORO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, ref TArg4 arg4, out TArg5 arg5);

            public __ProcedureOOORO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, out arg3, ref arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOOOI<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, TArg5 arg5);

            public __ProcedureOOOOI(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, out arg3, out arg4, arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOOOR<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, ref TArg5 arg5);

            public __ProcedureOOOOR(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, out arg3, out arg4, ref arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }

        private class __ProcedureOOOOO<T, TArg1, TArg2, TArg3, TArg4, TArg5> : IObjectInvoker
        {
            private delegate void Proc(T target, out TArg1 arg1, out TArg2 arg2, out TArg3 arg3, out TArg4 arg4, out TArg5 arg5);

            public __ProcedureOOOOO(MethodInfo method)
            {
                _proc = (Proc)Delegate.CreateDelegate(typeof(Proc), null, method);
            }
            object IObjectInvoker.Invoke(object target, object[] args)
            {
                TArg1 arg1 = (TArg1)args[0];
                TArg2 arg2 = (TArg2)args[1];
                TArg3 arg3 = (TArg3)args[2];
                TArg4 arg4 = (TArg4)args[3];
                TArg5 arg5 = (TArg5)args[4];
                _proc((T)target, out arg1, out arg2, out arg3, out arg4, out arg5);
                args[0] = arg1;
                args[1] = arg2;
                args[2] = arg3;
                args[3] = arg4;
                args[4] = arg5;
                return null;
            }

            private Proc _proc;
        }
#endif
    }
}
